package com.qf.medicaldoctoradmin.onlineSigning.TeamHomepage.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.listener.PatternTopic;
import org.springframework.data.redis.listener.RedisMessageListenerContainer;
import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;

@Configuration
// 标记这个类是一个配置类，Spring 容器会自动检测并加载这个类
public class RedisMonitorConfig {

    // 创建一个 RedisMessageListenerContainer 实例，用于监听 Redis 中的消息
    @Bean
    public RedisMessageListenerContainer redisMessageListenerContainer(
            // 注入 Redis 连接工厂，用于创建与 Redis 服务器的连接
            RedisConnectionFactory redisConnectionFactory,
            // 注入 MessageListenerAdapter 实例，用于适配消息监听器和消息处理器
            MessageListenerAdapter messageListenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        // 设置 Redis 连接工厂
        container.setConnectionFactory(redisConnectionFactory);
        // 添加消息监听器，监听所有匹配 "__keyevent@0__:expired" 模式的键过期事件
        container.addMessageListener(messageListenerAdapter, new PatternTopic("__keyevent@0__:expired"));
        return container;
    }

    // 创建一个 MessageListenerAdapter 实例，用于适配 DoctorSignupListener 实例和 "onMessage" 方法
    @Bean
    public MessageListenerAdapter messageListenerAdapter(
            // 注入 DoctorSignupListener 实例，用于处理消息事件
            DoctorSignupListener doctorSignupListener) {
        return new MessageListenerAdapter(doctorSignupListener, "onMessage");
    }
}
